package dayan;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s = scanner.nextLine();
        scanner.close();

        // 构建一个标记，表示是否出现了异常，初始化为false表示没有异常
        boolean isError = false;

        // 构建哈希表，"quack"分别对应01234一共五个索引
        Map<Character, Integer> word = new HashMap<>();
        word.put('q', 0);
        word.put('u', 1);
        word.put('a', 2);
        word.put('c', 3);
        word.put('k', 4);

        // cnt数组：记录"quack"中每个字符被叫了几次，即每个字符的出现个数。
        // 要注意，cnt中的计数，并不代表大雁的总个数。
        int[] cnt = new int[5];

        for (char ch : s.toCharArray()) {
            // 获得字符ch在数组cnt中的索引idx，即表示"quack"对应的01234一共五个索引
            int idx = word.get(ch);
            // ch对应的计数+1
            cnt[idx]++;

            // ch不是"q"，且前一个字符数目少于当前字符数目，出现错误
            if (ch != 'q' && cnt[idx] > cnt[idx - 1]) {
                // 标记isError改为true，同时退出循环
                isError = true;
                break;
            }

            // 遇到"q"，表示出现新的雁叫，可能可以复用之前的大雁，如果：
            // 1. 之前有某大雁叫过"k"，那么这只大雁可以复用，cnt整体-1，表示可以少算一只大雁
            // 2. 之前没有大雁叫过"k"，那么无法进行大雁的复用，无需做任何操作
            // cnt[4]表示之前叫过"k"的大雁的个数，
            // cnt[4] >= 1即表示，存在某大雁叫过"k"，这只大雁可以拿来复用
            if (ch == 'q' && cnt[4] >= 1) {
                for (int i = 0; i < 5; i++) {
                    cnt[i]--;
                }
            }
        }

        // 排除特殊情况，最终计算结束时，cnt中的元素应该相等
        // 如果存在不相等的元素，则说明各个字符的总数不一致，出现异常
        int firstCount = cnt[0];
        for (int i = 1; i < cnt.length; i++) {
            if (cnt[i] != firstCount) {
                isError = true;
                break;
            }
        }

        // 如果isError为true，说明出现了异常，输出-1
        // 否则最终cnt中所有计数一致，这个数即为所需要的大雁的个数，输出之
        if (isError) {
            System.out.println(-1);
        } else {
            System.out.println(cnt[0]);
        }
    }
}

